# 作业：
# 1、编写函数，从键盘输入一字符串，把其中的各个字符颠倒，标点符号不颠倒，例如，‘I enjoy reading!’，经过函数调用后变为‘gnidaer yojne I’
# def reverse_string(string):
#     reversed_string = ''
#     punctuation = '.,!?'
#     for char in string:
#         if char in punctuation:
#             reversed_string += char
#         else:
#             reversed_string = char + reversed_string#字符串左边加
#     return reversed_string
# print(reverse_string("I enjoy reading!"))
# 2、找出列表 a = [“hello”, “world”, “yoyo”, “congratulations”] 中单词最长的一个。
# def find_longest_word(lst):
#     longest_word = max(lst, key=len)#长度len作为key
#     return longest_word
# print(find_longest_word(['hello','world', 'yoyo', 'congratulations']))
# 3、如果有一个列表 a = [1,3,5,7,11]，那么如何让它反转成 [11,7,5,3,1]，并且取到奇数位值的数字 [1,5,11]
# def reverse_and_filter_odd(lst):
#     reversed_lst = lst[::-1]#步进-1就是倒叙
#     odd_values = reversed_lst[0::2]#步进2就是隔一个一取
#     return odd_values
# print(reverse_and_filter_odd([1,3,5,7,11]))
# 4、输入一个包含若干任意数据类型的列表，输出该列表中等价于True的元素组成的列表，
# def filter_true_values(lst):
#     true_values = [elem for elem in lst if bool(elem) == True]#true就是非零/None/False
#     return true_values
# print(filter_true_values([0,1,2,None,False,'a']))
# 例如，输入[1,0,2,None,False,"a"]，输出[1,2,'a']
# 5、给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素，并返回移除后数组的新长度。
# 示例：
# 输入：nums = [3,2,2,3], val = 3
# 输出：2, nums = [2,2]
# def remove_element(nums, val):
#     nums.sort()
#     while val in nums:
#         nums.remove(val)
#     return len(nums),nums
# print(remove_element(nums = [3,2,2,3], val = 3))
# 6、给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
# 示例 1:
# 输入: nums = [1,3,5,6], target = 5
# 输出: 2
# 示例 2:
# 输入: nums = [1,3,5,6], target = 2
# 输出: 1
# 示例 3:
# 输入: nums = [1,3,5,6], target = 7
# 输出: 4
# def search_insert(nums, target):
#     if target in nums:
#         return nums.index(target)
#     else:
#         nums.append(target)
#         nums.sort()
#         return nums.index(target)
# print(search_insert(nums = [1,3,5,6], target = 5))
# 7、给你一个下标从 0 开始的字符串 details 。details 中每个元素都是一位乘客的信息，信息用长度为 15 的字符串表示，表示方式如下：
# 前十个字符是乘客的手机号码。
# 接下来的一个字符是乘客的性别。
# 接下来两个字符是乘客的年龄。
# 最后两个字符是乘客的座位号。
# 请你返回乘客中年龄 严格大于 60 岁 的人数
#
# 示例 1：
# 输入：details = ["7868190130M7522","5303914400F9211","9273338290F4010"]
# 输出：2
# 解释：下标为 0 ，1 和 2 的乘客年龄分别为 75 ，92 和 40 。所以有 2 人年龄大于 60 岁
# 示例 2：
# 输入：details = ["1313579440F2036","2921522980M5644"]
# 输出：0
# 解释：没有乘客的年龄大于 60 岁。
#
# def count_passengers(details):
#     count = 0
#     for detail in details:
#         age = int(detail[11:13])
#         if age > 60:
#             count += 1
#     return count
# print(count_passengers(["7868190130M7522","5303914400F9211","9273338290F4010"]))
# 8、写函数监测用户传入的对象（字符，列表，元组）的每一个元素是否有空内容
#
# def check_empty_elements(obj):
#     for elem in obj:
#         if elem == '':
#             return True
#     return False
# print(check_empty_elements(['']))
# 9、 随机生成20个学生的成绩; 判断这20个学生成绩的等级;
#  A：（90~100） B：（80~89） C：80以下
#
# import random
#
#
# def calculate_grade():
#     grades = []
#
#     for _ in range(20):
#         score = random.randint(0, 100)
#         if score >= 90:
#             grades.append('A')
#         elif score >= 80:
#             grades.append('B')
#         else:
#             grades.append('C')
#
#     return grades
# print(calculate_grade())
# 10、编写一个用户登录函数（用户名密码提前设置）；
# 返回用户登录成功或者失败的结果；
# def user_login(username, password):
#     correct_username = 'admin'
#     correct_password = '@123456!'
#
#     if username == correct_username and password == correct_password:
#         return '登录成功'
#     else:
#         return '登录失败'
# print(user_login("admin","@123456!"))